home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1998 October / Macworld (1998-10).dmg / Shareware World / Comms & Internet / WebMiner 1.0 / Sample FaceSpan Applications / Stock Watch Script < prev   
Text File  |  1998-07-26  |  6KB  |  215 lines

  1. Stock Watch Project Script
  2.  
  3. global name, theWindow, lastPrice, highPrice, lowPrice, change, successful, nextUpdate
  4.  
  5. on run --the application has been launched without any particular document to open 
  6.     set theWindow to "Main"
  7.     
  8.     open window theWindow
  9.     set the editable of column 2 of table "StockTable" of window theWindow to false
  10.     set the editable of column 3 of table "StockTable" of window theWindow to false
  11.     UpdateData()
  12.     
  13.     
  14. end run
  15.  
  16. on idle
  17.     local tix
  18.     set tix to the ticks
  19.     
  20.     if tix > nextUpdate then
  21.         UpdateData()
  22.     else
  23.         
  24.         set the contents of textbox "Status" of window theWindow to ("Idle. Update in " & ((nextUpdate - tix) / 60) div 1 & " secs.")
  25.     end if
  26.     
  27. end idle
  28.  
  29. on UpdateData()
  30.     local theData, x
  31.     set x to 1
  32.     set symbol to ""
  33.     set lastPrice to ""
  34.     set highPrice to ""
  35.     set lowPrice to ""
  36.     set change to ""
  37.     set successful to false
  38.     
  39.     repeat while x < row count of table "StockTable" of window theWindow
  40.         copy the (contents of cell x of column 1 of table "StockTable" of window theWindow as text) to symbol
  41.         if symbol = "" then
  42.             set x to row count of table "StockTable" of window theWindow -- end now
  43.         else
  44.             GetQuote("yahoo", symbol)
  45.         end if
  46.         
  47.         if x < row count of table "StockTable" of window theWindow then
  48.             if successful then
  49.                 set the contents of cell x of column 2 of table "StockTable" of window theWindow to lastPrice as text
  50.                 
  51.                 -- if the change is downward, set pen color to red
  52.                 if (count of characters in change) > 0 then
  53.                     if character 1 of change = "-" then
  54.                         set pen color of (cell x of column 3 of table "StockTable" of window theWindow) to 30
  55.                     else
  56.                         set pen color of (cell x of column 3 of table "StockTable" of window theWindow) to black
  57.                     end if -- minus
  58.                 end if -- count
  59.                 set the contents of (cell x of column 3 of table "StockTable" of window theWindow) to change
  60.             else
  61.                 set the contents of cell x of column 2 of table "StockTable" of window theWindow to "Error"
  62.                 set the contents of cell x of column 3 of table "StockTable" of window theWindow to "Error"
  63.             end if --successful
  64.             set x to x + 1
  65.         end if -- x < row count
  66.         
  67.     end repeat
  68.     set nextUpdate to (the ticks) + 7200
  69. end UpdateData
  70.  
  71.  
  72. on GetQuote(source, ticker)
  73.     
  74.     set the contents of textbox "Status" of window theWindow to "Retrieving \"" & ticker & "\" from " & source
  75.     
  76.     YahooQuote(ticker)
  77.     
  78.     if successful = false then
  79.         set the contents of textbox "Status" of window theWindow to "Error"
  80.     end if
  81.     
  82. end GetQuote
  83.  
  84. on YahooQuote(ticker)
  85.     local theDoc
  86.     local theData
  87.     set successful to true
  88.     tell application "WebMiner"
  89.         set theDoc to open "http://quote.yahoo.com/q?s=" & ticker & "&d=v" without displaying
  90.         
  91.         -- here we will repeat until the document is completely downloaded and parsed
  92.         repeat while not complete of theDoc
  93.         end repeat
  94.         
  95.         set theData to the contents of cell 3 of table 4 of theDoc
  96.         
  97.         -- trim off leading ">", returns, tabs, and spaces
  98.         set lastPrice to my trimfront(theData, ">", "")
  99.         set lastPrice to my trimbothends(lastPrice, return, " ")
  100.         set lastPrice to my trimbothends(lastPrice, return, tab)
  101.         set lastPrice to my trimbothends(lastPrice, tab, " ")
  102.         set lastPrice to my trimbothends(lastPrice, " ", "")
  103.         
  104.         set theData to the contents of cell 4 of table 4 of theDoc
  105.         
  106.         -- trim off leading ">", returns, tabs, and spaces
  107.         
  108.         set change to my trimfront(theData, ">", "")
  109.         set change to my trimbothends(change, return, " ")
  110.         set change to my trimbothends(change, return, tab)
  111.         
  112.         set change to my trimbothends(change, tab, " ")
  113.         set change to my trimbothends(change, " ", "-")
  114.         set change to my trimbothends(change, " ", "+")
  115.         
  116.         close theDoc
  117.     end tell
  118.     
  119. end YahooQuote
  120.  
  121.  
  122. on chosen theObj -- a menu item has been chosen    
  123.     copy name of window of theObj to theWindow
  124.     copy name of theObj to theMenuItem
  125.     copy title of menu of theObj to theMenu
  126.     
  127.     if index of menu of theObj = 1 then
  128.         display dialog "Quote Monitor Copyright © 1998 Brookline Software. All rights reserved."
  129.         
  130.     else if theMenu is "File" then
  131.         if theMenuItem = "Quit" then
  132.             quit
  133.         end if
  134.     end if
  135.     
  136. end chosen
  137.  
  138. -- string trim, find and replace utility functions
  139.  
  140. on trimbothends(str, trimchar, ignorechar)
  141.     return trimback(trimfront(str, trimchar, ignorechar), trimchar, ignorechar)
  142. end trimbothends
  143.  
  144. on trimfront(str, trimchar, ignorechar)
  145.     local n, outstr
  146.     
  147.     set outstr to ""
  148.     
  149.     repeat with n from 1 to (count of characters in str)
  150.         set ch to character n of str
  151.         
  152.         if ch is not trimchar then
  153.             if ch is not ignorechar then
  154.                 set outstr to outstr & (characters n through (count of characters in str) of str) as string
  155.                 exit repeat
  156.             else
  157.                 set outstr to outstr & ch
  158.             end if
  159.         end if
  160.     end repeat
  161.     
  162.     return outstr
  163. end trimfront
  164.  
  165.  
  166. on trimback(str, trimchar, ignorechar)
  167.     local n, outstr
  168.     
  169.     set outstr to ""
  170.     repeat with n from (count of characters in str) to 1 by -1
  171.         set ch to character n of str
  172.         
  173.         if ch is not trimchar then
  174.             if ch is not ignorechar then
  175.                 set outstr to (characters 1 through (n - 1 - (count of characters in str)) of str & outstr) as string
  176.                 exit repeat
  177.             else
  178.                 set outstr to ch & outstr
  179.             end if
  180.         end if
  181.     end repeat
  182.     
  183.     return outstr
  184. end trimback
  185.  
  186. on findreplace(inputstr, findstr, replacestr)
  187.     local n, il, rl, fl, outstr
  188.     
  189.     set outstr to ""
  190.     
  191.     set il to count of characters in inputstr
  192.     set fl to count of characters in findstr
  193.     set rl to count of characters in replacestr
  194.     
  195.     set n to 1
  196.     
  197.     repeat
  198.         if ((n + fl ≤ il) and (characters n through (n + fl - 1) of inputstr) as string = findstr) then
  199.             set outstr to outstr & replacestr
  200.             set n to n + fl
  201.         else
  202.             set outstr to outstr & (character n of inputstr)
  203.             set n to n + 1
  204.         end if
  205.         
  206.         if n is greater than il then
  207.             exit repeat
  208.         end if
  209.         
  210.     end repeat
  211.     
  212.     return outstr
  213.     
  214. end findreplace
  215.